home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / gtlayout-source.lha / LTP_PasswordEditRoutine.c < prev    next >
C/C++ Source or Header  |  1996-08-22  |  2KB  |  114 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1996 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. #ifdef DO_PASSWORD_KIND
  15. ULONG SAVE_DS ASM
  16. LTP_PasswordEditRoutine(REG(a0) struct Hook *Hook,REG(a2) struct SGWork *Work,REG(a1) Msg msg)
  17. {
  18.     LayoutHandle *Handle;
  19.     ObjectNode *Node;
  20.     STRPTR Buffer;
  21.  
  22.     if(!GETOBJECT(Work->Gadget,Node))
  23.         return(TRUE);
  24.  
  25.     switch(msg->MethodID)
  26.     {
  27.         case SGH_KEY:
  28.  
  29.             Buffer = Node->Special.String.RealString;
  30.             Handle = Hook->h_Data;
  31.  
  32.             if(Work->IEvent->ie_Code == 0x5F && Handle->HelpHook)
  33.             {
  34.                 Work->Code        = 0x5F;
  35.                 Work->Actions    = (Work->Actions & ~SGA_BEEP) | SGA_END | SGA_USE;
  36.  
  37.                 break;
  38.             }
  39.  
  40.             switch(Work->EditOp)
  41.             {
  42.                 case EO_INSERTCHAR:
  43.  
  44.                     Buffer[Work->BufferPos - 1]    = Work->Code;
  45.                     Buffer[Work->NumChars]        = 0;
  46.  
  47.                     Work->WorkBuffer[Work->BufferPos - 1] = (UBYTE)'·';
  48.  
  49.                     break;
  50.  
  51.                 case EO_CLEAR:
  52.  
  53.                     Work->WorkBuffer[0]    = 0;
  54.                     Work->NumChars        = 0;
  55.                     Work->BufferPos        = 0;
  56.                     Work->EditOp        = EO_BIGCHANGE;
  57.  
  58.                     Buffer[0] = 0;
  59.  
  60.                     break;
  61.  
  62.                 case EO_DELBACKWARD:
  63.  
  64.                     Buffer[Work->NumChars] = 0;
  65.                     break;
  66.  
  67.                 case EO_NOOP:
  68.  
  69.                     break;
  70.  
  71.                 case EO_ENTER:
  72.  
  73.                     if(!(Work->IEvent->ie_Qualifier & QUALIFIER_SHIFT))
  74.                     {
  75.                         if(!Node->Special.String.LastGadget && Node->Special.String.LayoutHandle->AutoActivate)
  76.                             Work->Actions |= SGA_NEXTACTIVE;
  77.  
  78.                         if(!(Work->Actions & SGA_NEXTACTIVE))
  79.                             Work->Code = '\r';
  80.                     }
  81.  
  82.                     break;
  83.  
  84.                 case EO_MOVECURSOR:
  85.                 case EO_DELFORWARD:
  86.  
  87.                     Work->Actions &= ~SGA_USE;
  88.                     break;
  89.  
  90.                 default:
  91.  
  92.                     Work->Actions &= ~SGA_USE;
  93.                     Work->Actions |=  SGA_BEEP;
  94.                     break;
  95.             }
  96.  
  97.             break;
  98.  
  99.         case SGH_CLICK:
  100.  
  101.             Work->BufferPos    = Work->NumChars;
  102.             Work->EditOp    = EO_BIGCHANGE;
  103.  
  104.             break;
  105.  
  106.         default:
  107.  
  108.             return(FALSE);
  109.     }
  110.  
  111.     return(TRUE);
  112. }
  113. #endif
  114.